package com.proffline.utilidades;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class Util {
    
    public static final String NOMBRE_ARCHIVO = "log.txt";

    /* CONVERSIÓN A DD.MM.YYYY */
    public static String convierteFecha(String fsf) {
        SimpleDateFormat sdf1 = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd.MM.yyyy");
        try {
            String StringRecogido = fsf;
            Date datehora = sdf1.parse(StringRecogido);
            return sdf2.format(datehora);
        } catch (Exception e) {
            return null;
        }
    }

    public static String completarCeros(int cantidad, String cadena) {
        int restante = cantidad - cadena.length();
        String justificar = "";
        for (int i = 0; i < restante; i++) {
            justificar += "0";
        }
        return justificar + cadena;
    }

    /* CONVERSIÓN A YYYYMMDD */
    public static String convierteFechaHoyAFormatoYYYYMMDD(Date fechaHoy) {
        SimpleDateFormat formato = new SimpleDateFormat("yyyyMMdd");
        return formato.format(fechaHoy);
    }

    /* CONVERSIÓN A HHMM */
    public static String convierteFechaHoyAFormatoHHMM(Date fechaHoy) {
        SimpleDateFormat formato = new SimpleDateFormat("HH:mm");
        return formato.format(fechaHoy);
    }

    /* MENSAJE DE CONEXION EXITOSA A SAP */
    public static String mensajeConexionExitosaSAP(String nombreTabla) {
        return "(" + Util.convierteFechaHoyAFormatoDDMMYYYYHHMMSSAA(new Date()) + ")" + " Se conectó a SAP correctamente para la carga de datos de la tabla " + nombreTabla + ".";
    }

    /* MENSAJE DE CONEXION NO EXITOSA A SAP */
    public static String mensajeConexionNoExitosaSAP(String nombreTabla) {
        return "(" + Util.convierteFechaHoyAFormatoDDMMYYYYHHMMSSAA(new Date()) + ")" + " No se conectó a SAP correctamente para la carga de datos de la tabla " + nombreTabla + ".";
    }

    /* MENSAJE DE CARGA DE DATOS EXITOSA DE SAP */
    public static String mensajeCargaDatosExitosaSAP(String nombreTabla) {
        return "(" + Util.convierteFechaHoyAFormatoDDMMYYYYHHMMSSAA(new Date()) + ")" + " Se cargó correctamente los datos de SAP para la tabla " + nombreTabla + ".";
    }

    /* MENSAJE DE LIMPIAR DATOS EXITOSA DE SQL */
    public static String mensajeLimpiarDatosExitosaSQL(String nombreTabla) {
        return "(" + Util.convierteFechaHoyAFormatoDDMMYYYYHHMMSSAA(new Date()) + ")" + " Se limpió correctamente los datos de la tabla " + nombreTabla + ".";
    }

    /* MENSAJE DE LIMPIAR DATOS NO EXITOSA DE SQL */
    public static String mensajeLimpiarDatosNoExitosaSQL(String nombreTabla) {
        return "(" + Util.convierteFechaHoyAFormatoDDMMYYYYHHMMSSAA(new Date()) + ")" + " No se limpió correctamente los datos de la tabla " + nombreTabla + ".";
    }

    /* MENSAJE DE CARGA DE DATOS EXITOSA DE SQL */
    public static String mensajeCargaDatosExitosaSQL(String nombreTabla) {
        return "(" + Util.convierteFechaHoyAFormatoDDMMYYYYHHMMSSAA(new Date()) + ")" + " Se cargó correctamente los datos a la tabla " + nombreTabla + ".";
    }

    /* MENSAJE DE CARGA DE DATOS NO EXITOSA DE SQL */
    public static String mensajeCargaDatosNoExitosaSQL(String nombreTabla) {
        return "(" + Util.convierteFechaHoyAFormatoDDMMYYYYHHMMSSAA(new Date()) + ")" + " No se cargó correctamente los datos a la tabla " + nombreTabla + ".";
    }

    /* CONVERSIÓN DE TEXTO SIMPLE A FORMATO HTML */
    public static String convierteTextoAFormatoHTML(int codigo, String texto) {
        switch (codigo) {
            case 1:
                texto = "<font size='3' color='00FF33' face='Lucida Console'>" + texto + "</font><br/></html>"; // Mensaje relacionado a la Base de Datos.
                break;
            case 2:
                texto = "<font size='3' color='yellow' face='Lucida Console'>" + texto + "</font><br/></html>"; // Mensaje relacionado a SAP.
                break;
            case 3:
                texto = "<font size='3' color='red' face='Lucida Console'>" + texto + "</font><br/></html>"; // Mensaje relacionado a las excepciones.
                break;
            case 4:
                texto = "<font size='3' color='white' face='Lucida Console'>" + texto + "</font><br/></html>"; // Mensaje relacionado al tiempo de duraciòn.
                break;
        }
        return texto;
    }

    /* CONVERSIÓN A DDMMYYYYHHMMSSAA */
    public static String convierteFechaHoyAFormatoDDMMYYYYHHMMSSAA(Date fechaHoy) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss aa");
        return formato.format(fechaHoy);
    }

    /* CONVERSIÓN DE SEGUNDOS A MINUTOS */
    public static String convierteSegundosAMinutos(long milisegundos) {
        int minutos = 0;
        long segundos = milisegundos / 1000l;
        while (segundos >= 60) {
            segundos -= 60;
            minutos++;
        }
        if (minutos == 0) {
            return "Tiempo total de sincronización : " + segundos + " segundos.";
        } else if (minutos == 1) {
            if (segundos != 0) {
                return "Tiempo total de sincronización : " + minutos + " minuto y " + segundos + " segundos.";
            } else {
                return "Tiempo total de sincronización : " + minutos + " minuto.";
            }
        } else {
            if (segundos != 0) {
                return "Tiempo total de sincronización : " + minutos + " minutos y " + segundos + " segundos.";
            } else {
                return "Tiempo total de sincronización : " + minutos + " minutos.";
            }
        }
    }
    
    /* OBTIENE LA TRAZA DEL ERROR LANZADO EN EL CATCH */
    public static String getStackTrace(Throwable e) {
        Writer writer = new StringWriter();
        PrintWriter printWriter = new PrintWriter(writer);
        e.printStackTrace(printWriter);
        return writer.toString();
    }
    
    /* LEE EL ARCHIVO log.txt */
    public static String leerArchivoLog(){
        String mensaje = "";
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        try {
            archivo = new File (NOMBRE_ARCHIVO);
            if(!archivo.exists()){
                escribirErrorAArchivoLog("");
                archivo = new File (NOMBRE_ARCHIVO);
            }
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            // Lectura del fichero
            String linea;
            while((linea = br.readLine())!= null){
                mensaje += linea.toString();
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{                    
                if( null != fr ) {   
                    fr.close();     
                }                  
            } catch (Exception e2) { 
                e2.printStackTrace();
            }
        }
        return mensaje;
    }
    
    /* LIMPIA EL ARCHIVO log.txt */
    public static void limpiarArchivoLog(){
        FileWriter fichero = null;
        PrintWriter pw = null;
        try {
            fichero = new FileWriter(NOMBRE_ARCHIVO);
            pw = new PrintWriter(fichero);
            pw.print("");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
               if (null != fichero)
                   fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
    }
    
    /* ESCRIBE EL ARCHIVO log.txt */
    public static void escribirErrorAArchivoLog(String error){
        FileWriter fichero = null;
        PrintWriter pw = null;
        try {
            fichero = new FileWriter(NOMBRE_ARCHIVO, true);
            pw = new PrintWriter(fichero);
            pw.println(error);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
               if (null != fichero)
                   fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
    }
    
//    public static List<String> obtenerListaNombreArchivosFTP() {
//        List<String> listaNombreArchivosFTP = new ArrayList<String>();
//        FTPClient client = new FTPClient();
//        String sFTP = "10.10.10.19";
//        String sUser = "proffline";
//        String sPassword = "sunday*8000";
//        int reply = 0;
//        try {
//            client.connect("10.10.10.19");
//            boolean login = client.login("proffline", "sunday*8000");
//            if (login) {
//            reply = client.getReplyCode();
//            if (FTPReply.isPositiveCompletion(reply)) {
//                client.changeWorkingDirectory("/instalador-proffline");
//                FTPFile[] archivosFTP = client.listFiles();
//                if (archivosFTP.length > 0){
//                    for(FTPFile arch : archivosFTP){
//                        listaNombreArchivosFTP.add(arch.getName());
//                    }
//                }
//            } else {
//                client.disconnect();
//            }
//        } else {
//            System.out.println("No se logueo.");
//        }
//        client.logout();
//        client.disconnect();
//        } catch (IOException ioe) {
//            ioe.printStackTrace();
//        }
//        return listaNombreArchivosFTP;
//    }
}
